import myCreateElement from './myCreateElement'
import myUpdateChildren from './myUpdateChildren'
/**
 * 新旧节点是同一个节点的情况
 *
 * ①新的虚拟dom只有文本--新的虚拟dom和旧的虚拟dom text不相等
 *    如果相等的话，也就是说旧节点存在text,没有children属性，此时什么也不做
 * ②新的虚拟dom存在children >>>
 *    2-1：旧的虚拟dom没有children---将旧的dom节点的text置为空，遍历新的虚拟dom将节点添加到elm后
 *    2-2：旧的虚拟dom有children---需要用到diff算法进行精细化比较，更新dom
 * @param {Object} oldVnode
 * @param {Object} newVnode
 * @returns
 */
export default function myPatchVnode(oldVnode, newVnode) {
  console.log('myPatchVnode方法执行')
  if (oldVnode === newVnode) return
  // 新节点只有文本的情况
  // 此时不管就节点是否有text还是children
  if (
    newVnode.text &&
    (newVnode.children == undefined || newVnode.children.length == 0)
  ) {
    if (!(oldVnode.text === newVnode.text)) {
      console.log('新节点只有text,并且旧节点和新节点text不相同')
      oldVnode.elm.innerText = newVnode.text
    }
    // 两者的text相等，则不需要任何操作
  } else {
    // 新节点存在children的情况
    if (oldVnode.children != undefined || oldVnode.children.length > 0) {
      //--旧节点存在children的情况--需要使用diff算法进行精细化比较
      myUpdateChildren(oldVnode.elm, oldVnode.children, newVnode.children)
    } else {
      //--旧节点不存在children的情况
      // ①删除旧节点的text值
      // ②循环遍历将新节点的children添加旧节点位置
      console.log(
        '新节点存在children,并且旧节点不存在children(也就是说就节点存在text)'
      )
      oldVnode.lem.innerText = ''
      for (var i = 0; i < newVnode.children.length; i++) {
        let newDom = myCreateElement(newVnode.children[i])
        oldVnode.elm.appendChild(newDom)
      }
    }
  }
}
